/*
package com.example.anwserai.demos.web.util;


import com.example.anwserai.demos.web.entity.DocumentAnalysisResult;
import lombok.extern.slf4j.Slf4j;

import okhttp3.OkHttpClient;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.client.OkHttp3ClientHttpRequestFactory;
import org.springframework.util.StringUtils;
import org.springframework.web.client.RestTemplate;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;


import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

@Slf4j
public class QwenApiUtilQ4 {

    private static final RestTemplate restTemplate = restTemplateByOkHttp();

    private static String API_KEY = "cfa686ec-894b-4603-a76d-368984412534";
    private static String MODEL = "Qwen2.5-72B-Instruct-W8A8";
    private static String API_URL = "http://192.168.255.25:20000/v1/chat/completions";

    //private static String API_KEY = "sk-b84a7192f4d64f208720f09a363da791";
    //private static String MODEL = "qwen-plus";
    //private static String API_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions";

    public static void setConfig(String newApiKey, String newModel, String newApiUrl) {
        API_KEY = newApiKey;
        MODEL = newModel;
        API_URL = newApiUrl;
    }
    // 需求4
    private static final String ask_message ="解析通知的内容，生成解析的返回格式请以标准的json格式，字段为统一为字符串类型，不要包含额外内容；" +
        "返回json包含以下字段:文件标题、文稿篇幅是否合规" +
            "fileContent：" +
            "正文内容。提取正文内容，排除页眉、页脚、标题、抬头和表格。"+

            "errorcontent：" +
            "出错位置。定位规则：检测正文文本中的错别字，返回共有多少错别字，以及错别词。示例：'文中一共存在两个错别字。第一个错别字为《暗拳》；第二个错别字为《鲍账》；'" +

            "is_length_Compliance：" + "文稿篇幅是否合规."+

			"doc_title：" +
            "发文标题。定位规则：从文本开头提取首个以显著标识（如单独成行的###、加粗或居中）开头的主标题，排除附件名称。"
            + "示例：'关于...的通知'；标题一般会包含'关于'前缀及'通知''决定'等文种词，有的公文标题有多行(在'关于'前的文本也可能是标题。要求完整保留" +
            "is_length_Compliance：" + "文稿篇幅是否合规."+
            "填充内容仅是“涉及全局性工作，文件内容超过5000字，建议缩短篇幅”,“涉及全局性工作，文章篇幅合规”，“文件内容超过4000字，建议缩短篇幅”，“文章篇幅合规”其中之一。"+
            "判以文本中标题和正文部分中包含“全局性”、“综合性”、“整体性”的文件，其正文部分字数超过5000字的为“涉及全局性工作，文件内容超过5000字，建议缩短篇幅”，正文部分字数不超过5000字的为“涉及全局性工作，文章篇幅合规”"+
            "判以文本中标题和正文部分中不包含“全局性”、“综合性”的文件，其正文部分字数超过4000字的为“文件内容超过4000字，建议缩短篇幅”，正文部分字数不超过4000字的为“文章篇幅合规”"+
            "is_completion_level: "+"附件完齐程度。"+
            "判断文件是否具有以下附件：发文说明、征求意见情况、定密（密级和保密期限）审核表、发文依据文件、风险评估报告、公平竞争审查意见、合法性审核意见等发文要件。涉及会议活动的应附具会议活动方案、背景资料等要件材料。"+
            "并将缺失文档标明。"+"最终输出例如：“附件完齐”，“附件不齐全，缺失发文说明”"+
            "accuracy_information: "+"信息准确程度。"+
            "检测正文文本中的错别字，并返回共有多少错别字，且每个错别字的位置信息。"+
            //"并标明出错位置及出错文字。"+"最终输出例如：“文中一共存在两个错别字。第一个错别字起始位置为正文中的13位，结束位置为正文中的15位，为“暗拳”；第二个错别字起始位置为正文中的24位，结束位置为正文中的26位，为“鲍账”；”"+
            "并标明出错位置及出错文字。"+"最终输出例如：“文中一共存在两个错别字。第一个错别字为《暗拳》；第二个错别字为《鲍账》；”"+
            "is_Complete_elements: "+"要素是否齐全"+
            "判断文件中版头、主体、版记等公文各要素是否完整规范；判断段落、字体、纸张、排版等格式是否符合规范；判断文字、数字、计量单位和标点符号等用法是否符合规范。"+
            "并将标明不符合地方"+"最终输出例如：“要素齐全”"+
            "is_meet_requirements: "+"满足条例规定"+
            "判断文件是否文种使用正确,发文规格合适,公文格式规范。"+
            "并将标明不规范地方"+"最终输出例如：“文种使用正确”"+
            "is_unity_coherence: "+"文理是否通顺"+
            "判断文件是否主题鲜明、标题清晰、内容完整、结构严谨、语言庄重、表述简练、用词规范。标题与内容匹配，语法准确，修辞得当，无相同内容前后表述不一致、同类内容分散、同一句话反复出现、角度不对、文理不通、词不达意等情形。"+
            "并将标明不规范地方"+"最终输出例如：“文理通顺”"+
            "is_meet_requirements: "+"满足条例规定"+
            "不对机构编制、干部配备、工资福利待遇、创建示范、达标、“一票否决”和签订责任状等事项提出具体要求，一般不提出报送贯彻落实情况、制定配套文件的要求。"+
            "并将标明不规范地方"+"最终输出例如：“文种使用正确”"+
            "is_unity_coherence: "+"文理是否通顺"+
            "判断文件是否主题鲜明、标题清晰、内容完整、结构严谨、语言庄重、表述简练、用词规范。标题与内容匹配，语法准确，修辞得当，无相同内容前后表述不一致、同类内容分散、同一句话反复出现、角度不对、文理不通、词不达意等情形。"+
            "并将标明不规范地方"+"最终输出例如：“文理通顺”";


    // 需求2：请求AI
    public static String analyzeNotice(String noticeContent) {
        try {
            // 1. 构建请求体（使用Fastjson序列化）
            JSONObject requestBody = new JSONObject();
            requestBody.put("model", MODEL);
            requestBody.put("temperature", 0.1);


            JSONArray messages = new JSONArray();
            messages.add(new JSONObject()
                    .fluentPut("role", "system")
                    .fluentPut("content", ask_message));

            messages.add(new JSONObject()
                    .fluentPut("role", "user")
                    .fluentPut("content", "请分析以下督察通知：\n" + noticeContent));

            requestBody.put("messages", messages);


            HttpHeaders httpHeaders = new HttpHeaders();
            httpHeaders.add("Content-Type", "application/json");
            httpHeaders.add("Authorization", "Bearer " + API_KEY);

            HttpEntity<String> entity = new HttpEntity<>(requestBody.toString(), httpHeaders);
            return restTemplate.exchange(API_URL, HttpMethod.POST, entity, String.class).getBody();
        } catch (Exception e) {
            log.error("请求ai过程中出错", e);
            throw new RuntimeException("请求ai过程中出错");
        }
    }

    public static DocumentAnalysisResult getContent(String message) {
        try {
            if (!StringUtils.hasLength(message)) {
                throw new RuntimeException("提取结果为空");
            }
            JSONObject respJson = JSON.parseObject(message);
            JSONArray choices = respJson.getJSONArray("choices");
            String content = choices.getJSONObject(0)
                    .getJSONObject("message")
                    .getString("content");
            content = content.replaceAll("```[a-zA-Z]*\\n|```", "");
            // 将 content 字符串解析为 JSON 对象

			// 找到 `}` 的位置
			int endIndex = content.indexOf('}');

			// 截取 `}` 之前的数据
            String result = content.substring(0, endIndex + 1); // 包含 `}`

			System.out.println("content:::::"+result);
            // 查找 `}` 的位置

            JSONObject contentJson = JSON.parseObject(result);

            // 提取字段 TODO


            String fileContent = contentJson.getString("fileContent");
            long startTime = System.currentTimeMillis();
            JSONArray errorcontent = extractTypoPositions(fileContent,contentJson.getString("errorcontent"));
            */
/*Thread.sleep(2000);*//*

            long endTime = System.currentTimeMillis();
            // 计算执行时长
            long duration = endTime - startTime;
            System.out.println("代码执行时长：" + duration + " 毫秒");

            System.out.println("errorcontent：：："+errorcontent);
            String docTitle = contentJson.getString("doc_title");
            String islengthcompliance = contentJson.getString("is_length_Compliance");
            String accuracyinformation = contentJson.getString("accuracy_information");
            String isCompleteelements = contentJson.getString("is_Complete_elements");
            String ismeetrequirements = contentJson.getString("is_meet_requirements");
            String iscompletionlevel = contentJson.getString("is_completion_level");
            String isunitycoherence = contentJson.getString("is_unity_coherence");

            // 构建 SupervisionResult 对象 TODO
            //return new DocumentAnalysisResult(docTitle, islengthcompliance,iscompletionlevel);

            DocumentAnalysisResult documentAnalysisResult =  new DocumentAnalysisResult(fileContent,errorcontent,docTitle, islengthcompliance,iscompletionlevel,accuracyinformation,isCompleteelements,ismeetrequirements,isunitycoherence);
            System.out.println("documentAnalysisResult::"+documentAnalysisResult.getErrorcontent().toString());
            return documentAnalysisResult;
        } catch (Exception e) {
            log.error("ai提取结果转换json过程中出错", e);
            throw new RuntimeException("ai提取结果转换json过程中出错");
        }
    }

    public static RestTemplate restTemplateByOkHttp() {
        // 配置 OkHttpClient 超时
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .connectTimeout(5, TimeUnit.MINUTES) // 连接超时
                .readTimeout(5, TimeUnit.MINUTES)    // 读取超时
                .writeTimeout(5, TimeUnit.MINUTES)  // 写入超时（可选）
                .build();

        // 使用 OkHttpClient 创建 RestTemplate
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.setRequestFactory(new OkHttp3ClientHttpRequestFactory(okHttpClient));

        return restTemplate;
    }

    private static JSONArray extractTypoPositions(String fileContent,String inputText) {
        // 记录开始时间
        long startTime = System.currentTimeMillis();
        JSONArray errors = new JSONArray();

        */
/*String target = "拟好";*//*


        List<String> result = new ArrayList<>();
        // 正则表达式匹配双引号内的内容
        String regex = "《(.*?)》";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(inputText);

        while (matcher.find()) {
            result.add(matcher.group(1));
        }

        int startIndex = 0;
        System.out.println("result错别字：："+result.toString());
        for (int i = 0; i < result.size(); i++) {
            while (true) {
                startIndex = fileContent.indexOf(result.get(i), startIndex);
                if (startIndex == -1) break;

                int endIndex = startIndex + result.get(i).length();
                */
/*System.out.println("起始位置: " + startIndex + ", 结束位置: " + endIndex);*//*


                // 构建错别字位置对象
                JSONObject error = new JSONObject();
                error.put("start", startIndex);
                error.put("end", endIndex);

                // 添加到 errors 数组
                errors.add(error);

                startIndex = endIndex;
                // 继续查找下一个匹配
            }
        }

        // 使用正则表达式匹配错别字位置
        //String regex = "起始位置为正文中的(\\d+)位，结束位置为正文中的(\\d+)位";
        //java.util.regex.Pattern pattern = java.util.regex.Pattern.compile(regex);
        //java.util.regex.Matcher matcher = pattern.matcher(inputText);
//
        //// 遍历匹配结果
        //while (matcher.find()) {
        //    int start = Integer.parseInt(matcher.group(1)); // 起始位置
        //    int end = Integer.parseInt(matcher.group(2));   // 结束位置
//
        //    // 构建错别字位置对象
        //    JSONObject error = new JSONObject();
        //    error.put("start", start);
        //    error.put("end", end);
//
        //    // 添加到 errors 数组
        //    errors.add(error);
        //}
        // 记录结束时间
        long endTime = System.currentTimeMillis();


        return errors;
    }

}
*/
